#include "pch.hpp"
#include "NestedState.hpp"
#include "Widget.hpp"

using namespace Engine;
using namespace Engine::Ui;




NestedState::NestedState(const SystemState::ptr& state)
	: m_state(state)
	, m_cursor(state->cursor(), -state->parentPos())
	, m_parentPos(state->parentPos())
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

NestedState::NestedState(const NestedState& that, int2 offset)
	: m_state(that.m_state)
	, m_cursor(that.m_cursor, -offset)
	, m_parentPos(that.m_parentPos + offset)
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




const Cursor& NestedState::cursor() const
{
	return m_cursor;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

int2 NestedState::parentPos() const
{
	return m_parentPos;
}
///////////////////////////////////////////////////////////////////////////////////////////////////




boost::shared_ptr<Widget> NestedState::modalWidget() const
{
	return m_state->modalWidget();
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void NestedState::setModalWidget(boost::weak_ptr<Widget> widget)
{
	m_state->setModalWidget(widget);
}
///////////////////////////////////////////////////////////////////////////////////////////////////




boost::shared_ptr<Widget> NestedState::focusWidget() const
{
	return m_state->focusWidget();
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void NestedState::setFocusWidget(boost::weak_ptr<Widget> widget)
{
	m_state->setFocusWidget(widget);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void NestedState::unsetFocusWidget(boost::weak_ptr<Widget> widget)
{
	m_state->unsetFocusWidget(widget);
}
///////////////////////////////////////////////////////////////////////////////////////////////////





void NestedState::attach(boost::weak_ptr<Widget> widget)
{
	m_state->attach(widget);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void NestedState::detach(boost::weak_ptr<Widget> widget)
{
	m_state->detach(widget);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

bool NestedState::isAttached(boost::weak_ptr<Widget> widget) const
{
	return m_state->isAttached(widget);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void NestedState::attachBorder(boost::weak_ptr<Widget> widget, Border::Type border)
{
	m_state->attachBorder(widget, border);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void NestedState::detachBorder(boost::weak_ptr<Widget> widget)
{
	m_state->detachBorder(widget);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

bool NestedState::isAttachedBorder(boost::weak_ptr<Widget> widget) const
{
	return m_state->isAttachedBorder(widget);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

bool NestedState::hasAttached() const
{
	return m_state->hasAttached();
}
///////////////////////////////////////////////////////////////////////////////////////////////////
